package java6703.lesson02;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.paint.Paint;
import javafx.stage.Stage;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Words6703 extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        Scene scene = new Scene(getRoot(), 600, 400);
        primaryStage.setScene(scene);
        primaryStage.setTitle("提取三个字符的单词");
        primaryStage.show();


    }

    /**
     * 1.接收字符串
     * 2.通过模式对象得到匹配器对象
     * 3.通过find方法就是查找有没有满足条件的子串
     * 4.输出字符串
     * @return
     */
    private Parent getRoot() {
        Label lblStudent = new Label("212106703 陈杰");
        //边框【注意】多行代码的书写规范
        BorderStroke bs = new BorderStroke(Paint.valueOf("#8FBC8F")//边框的颜色
                , BorderStrokeStyle.DOTTED//边框的样式
                , new CornerRadii(10)//边框四个角的圆角
                , new BorderWidths(3));//边框的宽度
        lblStudent.setBorder(new Border(bs));//设置边框
        lblStudent.setPadding(new Insets(10));//设置边距

        //水平排列的两个控件，用于输入
        HBox hText = new HBox(10);
        final Label[] lblText = {new Label("输入单词：")};
        TextField tfText = new TextField();
        tfText.setPromptText("用空格分隔的数字串");//文本无内容时显示的提示信息
        hText.getChildren().addAll(lblText[0], tfText);
        hText.setAlignment(Pos.CENTER_LEFT);//两个控件的对齐方式

        Button button = new Button("提取单词");

        Label lblPrint = new Label();//显示排序结果

        //垂直排列的根节点
        VBox root = new VBox(20);//节点之间的垂直间距20
        //为根节点添加子节点
        root.getChildren().addAll(lblStudent, hText, button, lblPrint);
        root.setPadding(new Insets(20.0));//设置根节点的边距
        root.setAlignment(Pos.TOP_CENTER);//根节点中各节点的对齐方式
        root.setStyle("-fx-font-size:20");//用CSS样式设置容器中所有节点的字体大小


        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                //接收字符串
                String s = tfText.getText();

                //规则
                String regex = "\\b\\w{3}\\b";

                //把规则编译成模式对象
                Pattern p = Pattern.compile(regex);

                //通过模式对象得到匹配器对象
                Matcher m = p.matcher(s);

                String s2="";
                //通过find方法就是查找有没有满足条件的子串
                while (m.find()) {
                 s2+=s.substring(m.start(),m.end())+" ";
                }
                //输出字符串
                lblPrint.setText(s2);
            }
        });

        return root;
    }

}

